package service

import (
	"engine/model"
	"gorm.io/gorm"
	"lib/db"
	"lib/log"
	"lib/task"
)

func UpdateOldLevel(days int) error {
	defer func() {
		err := recover()
		if err != nil {
			log.Errorf("UpdateOldLevel error: %v", err)
		}
	}()
	err := db.GetDb().Debug().Transaction(func(tx *gorm.DB) error {

		txErr := tx.Table("my_user").Where("level <> old_level").UpdateColumn("old_level", gorm.Expr("level")).Error
		if txErr != nil {
			return txErr
		}

		txErr = tx.Table("my_user").Where("level>0").UpdateColumn("level", 0).Error
		if txErr != nil {
			return txErr
		}

		var levelUser []model.My_user_levels
		if err := db.GetDb().Where("is_cli=0 and days=? and is_now = 0", days).Group("uid").Find(&levelUser).Error; err != nil {
			log.Errorf("NotifyLevelHandel error err:", err)
			return err
		}

		if len(levelUser) > 0 {

			//设置每个用户的id 订
			for _, levelInfo := range levelUser {
				go task.SendUserLevel(levelInfo.Uid, days, nil)
			}
		}
		return nil
	})
	if err != nil {
		log.Errorf("UpdateOldLevel error: %v", err)
		return err
	}
	return nil
}
